﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ccit.ClassLibrary;

namespace Ccit.SysPlat.Purview
{
    /// <summary>
    /// Description: 系统平台权限菜单 -> 菜单接口
    /// Author: tim 2010-03-02
    /// </summary>
    public interface IMenu
    {
        /// <summary>
        /// 获取第一级菜单集合
        /// </summary>
        /// <returns></returns>
        List<MsMenu> GetStairMenuList();

        /// <summary>
        /// 获取当前菜单的下一级子菜单集合
        /// </summary>
        /// <param name="menuId">当前菜单Id</param>
        /// <param name="sourceType">页面传入的当前操作的源类型
        /// 0:当前正在通过admin进行菜单管理操作
        /// 1:当前正在通过模块装配功能添加菜单操作 
        /// </param>
        /// <returns></returns>
        List<MsMenu> GetSubMenuList(string menuId,string sourceType);

        /// <summary>
        /// 删除菜单
        /// </summary>
        /// <param name="menuId">菜单Id</param>
        /// <returns>
        ///     【0】: 操作结果
        ///     【1】: 结果描述
        /// </returns>
        List<string> Delete(string menuId);

        /// <summary>
        /// 保存菜单信息
        /// </summary>
        /// <param name="msMenu">菜单信息消息对象</param>        
        /// <returns>
        ///     【0】: 操作结果
        ///     【1】: 结果描述
        /// </returns>
        List<string> Save(MsMenu msMenu);


        /// <summary>
        /// 获取从当前菜单开始的所有上级菜单Id串(包含当前菜单)
        /// </summary>
        /// <param name="menuId">当前菜单Id</param>
        /// <returns></returns>
        string GetMenuLevelStruct(string menuId);


        /// <summary>
        /// 按菜单层级结构(即前导缩进)的形式获取所有有效的部门信息
        /// </summary>        
        /// <param name="filterMenuId">过滤掉的菜单Id(同时过滤掉菜单下的所有子菜单)</param>
        /// <param name="sysParam">是否能编辑系统菜单的开关</param>
        /// <returns></returns>
        List<MsKeyValue> GetALLMenus(string filterMenuId,string sysParam);

        /// <summary>
        /// 根据菜单Id获取菜单消息对象
        /// </summary>
        /// <param name="menuId">菜单Id</param>
        /// <returns></returns>
        MsMenu GetMenuInfo(string menuId);


        /// <summary>
        /// 在保存操作之前，校验菜单记录是否能被保存
        /// (在更新记录前调用)
        /// </summary>
        /// <param name="msMenu"></param>
        /// <returns></returns>
        List<string> IsCanSave(MsMenu msMenu);




    }
}
